package com.bk.util;

import java.util.Date;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.bk.entity.EmployeeInfo;

public class JwtUtil {
	public static final String SECRET_KEY = "123456"; // 秘钥
	public static final long TOKEN_EXPIRE_TIME = 5 * 60 * 1000; // token过期时间
	public static final long REFRESH_TOKEN_EXPIRE_TIME = 10 * 60 * 1000; // refreshToken过期时间
	private static final String ISSUER = "issuer"; // 签发人

	/**
	 * 生成签名
	 */
	public static String generateToken(EmployeeInfo employee) {
		Date now = new Date();
		Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY); // 算法
		String empSer = SerilizableObjectUtil.serialize(employee);
		long currentTimeMillis = System.currentTimeMillis();
		String string = empSer+currentTimeMillis;
		String token = JWT.create().withIssuer(ISSUER) // 签发人
				.withIssuedAt(now) // 签发时间
				.withExpiresAt(new Date(now.getTime() + TOKEN_EXPIRE_TIME)) // 过期时间
				.withClaim("employeeInfo", string) // 保存身份标识
				.sign(algorithm);
		return token;
	}

	/**
	 * 验证token
	 */
	public static boolean verify(String token) {
		try {
			Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY); // 算法
			JWTVerifier verifier = JWT.require(algorithm).withIssuer(ISSUER).build();
			verifier.verify(token);
			return true;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return false;
	}

	/**
	 * 从token获取柜员信息
	 */
	public static String getUsername(String token) {
		try {
			return JWT.decode(token).getClaim("employeeInfo").asString();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return "";
	}
}
